package org.example.elasticsearch.domain;

import org.example.elasticsearch.deserialize.EsDateDeserialize;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @author: sql
 * @date: 2024/6/7
 * @Description: 企业任务基本分包表（示例）
 * @version: 1.0
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class LgyzCustTaskBaseSubcontractDoc extends ESDoc {

    /**
     * 主键，自动生成
     */
    private String taskProxyId;

    /**
     * 任务主键lgyz_cust_task_base
     */
    private String custTaskId;

    /**
     * 任务单号
     */
    private String custTaskCode;

    /**
     * 众包任务单号
     */
    private String taskServerCode;

    /**
     * 分包任务单号
     */
    private String taskProxyCode;

    /**
     * 任务名称
     */
    private String taskName;

    /**
     * 二级任务类型编号
     */
    private String secTaskId;

    /**
     * 二级任务类型名称
     */
    private String secTaskTypeName;

    /**
     * 任务状态
     */
    private String serverTaskStatus;

    private String proxyTaskStatus;

    /**
     * 支付方式（0-线上支付，1-线下支付）
     */
    private String payType;

    /**
     * 众包任务单号分组
     */
    private String taskStaffCodeGroup;

    /**
     * 灵工姓名分组
     */
    private String staffNameGroup;

    /**
     * 灵工手机号分组
     */
    private String mobileGroup;

    /**
     * 企业ID
     */
    private String custId;

    /**
     * 企业名称
     */
    private String custName;

    /**
     * 企业统一社会信用代码
     */
    private String custCredit;

    /**
     * 行业企业ID
     */
    private String serviceCustId;

    /**
     * 行业企业名称
     */
    private String serviceCustName;

    /**
     * 行业统一社会信用代码
     */
    private String serviceCustCredit;

    /**
     * 区域企业ID
     */
    private String proxyCustId;

    /**
     * 区域企业名称
     */
    private String proxyCustName;

    /**
     * 区域统一社会信用代码
     */
    private String proxyCustCredit;

    /**
     * 操作人
     */
    private String operatorName;

    /**
     * 操作人手机号
     */
    private String operatorMobile;

    /**
     * 发布时间
     */
    @EsDateDeserialize
    private Date publishTime;

    /**
     * 总任务(收款)人数
     */
    private Integer totalCount;

    /**
     * 总任务(收款)金额
     */
    private BigDecimal serverSumTaskAmount;
    private BigDecimal proxySumTaskAmount;

    /**
     * 总承包收入金额
     */
    private BigDecimal sumIncome;

    /**
     * 行业商分润金额
     */
    private BigDecimal serverShare;

    /**
     * 待支付任务人数
     */
    private Integer payingCount;

    /**
     * 已支付收入
     */
    private BigDecimal serverPayIncome;
    private BigDecimal proxyPayIncome;

    /**
     * 已支付任务数
     */
    private Integer payCount;

    /**
     * 已撤销任务数
     */
    private Integer repealCount;

    /**
     * 待支付收入
     */
    private BigDecimal serverWaitPayIncome;
    private BigDecimal proxyWaitPayIncome;

    /**
     * 待支付任务数
     */
    private Integer serverWaitPayCount;
    private Integer proxyWaitPayCount;

    /**
     * 拒绝支付收入
     */
    private BigDecimal refuseIncome;

    /**
     * 审核结果任务数
     */
    private Integer reviewResCount;

    /**
     * 手动处理收入
     */
    private BigDecimal handIncome;

    /**
     * 客户取消任务数
     */
    private Integer custCancelCount;

    /**
     * 服务端拒绝任务数
     */
    private Integer serverRefuseCount;

    /**
     * 服务端检查任务数
     */
    private Integer serverCheckCount;

    /**
     * 管理员取消任务数
     */
    private Integer adminCancelCount;

    /**
     * 手动处理任务数
     */
    private Integer handCount;

    /**
     * 结束任务数
     */
    private Integer endCount;

    /**
     * 中止任务数
     */
    private Integer abortCount;

    /**
     * 退款任务数
     */
    private Integer refundCount;

    /**
     * 退款任务数1
     */
    private Integer refundCount1;

    /**
     * 退款结束任务数
     */
    private Integer refundEndCount;

    /**
     * 退款结束任务数1
     */
    private Integer refundEndCount1;

    /**
     * 等待确认任务数
     */
    private Integer serverWaitConfirmCount;
    private Integer proxyWaitConfirmCount;

    /**
     * 未支付结束任务数
     */
    private Integer unpayEndCount;

    /**
     * 进行中任务数
     */
    private Integer serverUnderwayCount;
    private Integer proxyUnderwayCount;

    /**
     * 未完成任务数
     */
    private Integer unfinishedNum;

    /**
     * 线下支付任务数
     */
    private Integer serverOfflinePayCount;
    private Integer proxyOfflinePayCount;

    /**
     * 行业服务商开票状态
     */
    private String serverBillStatus;

    /**
     * 区域服务商开票状态
     */
    private String proxyBillStatus;

    /**
     * 删除标识
     */
    private String delflag;


    /**
     * 获取 区域服务商其他任务金额
     *
     * @return
     */
    public BigDecimal getProxyOtherIncome() {
        // 根据SQL逻辑计算otherIncome
        // 如果字段为空，则默认为0
        BigDecimal sumTaskAmount = this.proxySumTaskAmount == null ? BigDecimal.ZERO : this.proxySumTaskAmount;
        BigDecimal payIncome = this.proxyPayIncome == null ? BigDecimal.ZERO : this.proxyPayIncome;
        BigDecimal waitPayIncome = this.proxyWaitPayIncome == null ? BigDecimal.ZERO : this.proxyWaitPayIncome;

        BigDecimal otherIncome;
        if (waitPayIncome.compareTo(BigDecimal.ZERO) <= 0) {
            otherIncome = sumTaskAmount.subtract(payIncome);
        } else {
            BigDecimal adjustedPayIncome = payIncome.compareTo(BigDecimal.ZERO) <= 0 ? payIncome : payIncome.subtract(serverShare);
            BigDecimal adjustedWaitPayIncome = waitPayIncome.compareTo(BigDecimal.ZERO) <= 0 ? waitPayIncome : waitPayIncome.subtract(serverShare);
            otherIncome = sumTaskAmount.subtract(adjustedPayIncome).subtract(adjustedWaitPayIncome);
        }
        return otherIncome;
    }
}
